3.12 [Ppis] Sections
These are optional sections. If the source module code contains any PPIs, then
this section must be generated in the "As Built" INF file listing each PPI with
its <CommentBlock>
content.
Summary
Defines the EDK II INF file [PPIs]
section content. This is a list of the
global PPI C Names that are referenced in the EDK II Module's C code.
Each PPI must be listed only once per section. PPIs listed in architectural sections are not permitted to be listed in the common architectural section.
The "common" architecture modifier in a section tag must not be combined with other architecture type; doing so will result in a build break.
The format of the <CommentBlock>
is the recommended format that will
guarantee that the information is correctly inserted into UEFI Distribution
Package description files by the Intel(R) UEFI Packaging Tool included in the
EDK II base tools project. The usages in the comment block describe how the PPI
is used in the C code.
A binary INF file must not contain any FeatureFlagExpression
content.
<Ppis> ::= "[Ppis" [<com_attribs>] "]" <EOL> <PpiStatements>*
<com_attribs> ::= {".common"} {<attribs>}
<attribs> ::= <attrs> ["," <TS> "Ppis" <attrs>]*
<attrs> ::= "." <arch>
<PpiStatements> ::= [<NUsageBlock>]
<TS> <PpiSpec> [<1UsageBlock>]
<PpiSpec> ::= <CName> [<FS> <FeatureFlagExpress>]
<1
UsageBlock> ::= <CommentBlock>
<NUsageBlock> ::= <CommentBlock>+
<FeatureFlagExpress> ::= <Boolean>
<CommentBlock> ::= <TS> <UsageField> <TS> [<Comment>] <EOL>
<UsageField> ::= ["##" <TS> <Usage> <TS>] [<Notify>]
<Notify> ::= "##" <TS> "NOTIFY" <TS>
<Usage> ::= {"PRODUCES"} {"SOMETIMES_PRODUCES"}
{"CONSUMES"} {"SOMETIMES_CONSUMES"}
{"UNDEFINED"}
Parameters
FeatureFlagExpress
When present, the feature flag expression determines whether the entry line is valid. If the feature flag expression evaluates to FALSE, this entry will be ignored by the EDK II build tools.
1UsageBlock and NUsageBlock
The 1UsageBlock
location, after the entry, is preferred if there is only one
usage for the PPI entry. If a PPI has multiple usages, then all CommentBlock
statements must precede the entry.
UNDEFINED
Typically, this entry will be used when tools creating/installing UEFI
Distribution Packages encounter a missing or misspelled usage. UNDEFINED
is
also valid when the PPI is not used as a PPI and the GUID value of the PPI is
used for something else.
CONSUMES
This module does not install the PPI, but needs to locate a PPI. Not valid if
the Notify
true.
PRODUCES
This module will load this PPI. Not valid if the Notify
attribute is true.
SOMETIMES_CONSUMES
This module does not install the PPI, but may need to locate a PPI under
certain conditions or execution paths. If the Notify
attribute is set, then
the module will use the PPI, named by GUID, via a registry PPI notify mechanism.
SOMETIME_PRODUCES
This module will load this PPI under certain conditions or execution paths. Not
valid if the Notify
attribute is true.
NOTIFY
This specifies whether this is a Ppi or PpiNotify. If set to, the module requires or consumes a PPI, named by GUID, via a register PPI notify mechanism.
Example
[ppis]
gEfiPeiMemoryDiscoveredPpiGuid
gEfiFindFvPpiGuid